package cn.iocoder.yudao.module.shop.service.masterstatistics;

import java.util.*;
import javax.validation.*;

import cn.hutool.cron.pattern.matcher.BoolArrayMatcher;
import cn.iocoder.yudao.module.shop.controller.admin.masterstatistics.vo.*;
import cn.iocoder.yudao.module.shop.dal.dataobject.jiucase.ShopJiuCaseDO;
import cn.iocoder.yudao.module.shop.dal.dataobject.masterstatistics.ShopMasterStatisticsDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.shop.dal.dataobject.order.ShopOrderDO;
import cn.iocoder.yudao.module.shop.dal.dataobject.orderfeedback.ShopOrderFeedbackDO;

/**
 * 艾灸师统计 Service 接口
 *
 * @author 曹建伟
 */
public interface ShopMasterStatisticsService {

    /**
     * 创建艾灸师统计
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createMasterStatistics(@Valid ShopMasterStatisticsCreateReqVO createReqVO);

    /**
     * 更新艾灸师统计
     *
     * @param updateReqVO 更新信息
     */
    void updateMasterStatistics(@Valid ShopMasterStatisticsUpdateReqVO updateReqVO);

    /**
     * 删除艾灸师统计
     *
     * @param id 编号
     */
    void deleteMasterStatistics(Long id);

    /**
     * 获得艾灸师统计
     *
     * @param id 编号
     * @return 艾灸师统计
     */
    ShopMasterStatisticsDO getMasterStatistics(Long id);

    /**
     * 获得艾灸师统计列表
     *
     * @param ids 编号
     * @return 艾灸师统计列表
     */
    List<ShopMasterStatisticsDO> getMasterStatisticsList(Collection<Long> ids);

    /**
     * 获得艾灸师统计分页
     *
     * @param pageReqVO 分页查询
     * @return 艾灸师统计分页
     */
    PageResult<ShopMasterStatisticsDO> getMasterStatisticsPage(ShopMasterStatisticsPageReqVO pageReqVO);

    /**
     * 获得艾灸师统计列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 艾灸师统计列表
     */
    List<ShopMasterStatisticsDO> getMasterStatisticsList(ShopMasterStatisticsExportReqVO exportReqVO);

    void recordOrder(ShopOrderDO shopOrderDO);

    void rollbackOrder(ShopOrderDO order);

    void recordFeedback(ShopOrderFeedbackDO feedbackDO);


    void recordFirstCharge(Long masterId, Integer count, Integer payPrice);

    void recordJiucase(ShopJiuCaseDO caseDO);
}
